#ifndef FRAGMENT_H
#define FRAGMENT_H

#include <map>
#include <vector>

#include <Klein/Shader/FragmentIdentifier.h>
#include <Klein/Shader/ParameterGroup.h>

class KLEIN_API Fragment
{
public:

	Fragment(const FragmentIdentifier& identifier);
	Fragment(const Fragment& fragment);
	~Fragment();

	const FragmentIdentifier& GetIdentifier() const;

	bool AddParameter(const Parameter& parameter);
	ParameterGroupRef GetParameterGroup() const;

	void SetSourceCode(const String& code);
	const String& GetSourceCode() const;

	bool Register() const;

protected:

	FragmentIdentifier mIdentifier;

	ParameterGroupRef mParameterGroup;

	String mSourceCode;
};

typedef boost::shared_ptr<Fragment> FragmentRef;

#endif
